home *** CD-ROM | disk | FTP | other *** search
- // This is a part of the Active Template Library.
- // Copyright (C) 1996-1997 Microsoft Corporation
- // All rights reserved.
- //
- // This source code is only intended as a supplement to the
- // Active Template Library Reference and related
- // electronic documentation provided with the library.
- // See these sources for detailed information regarding the
- // Active Template Library product.
-
- #ifndef __ATLCONV_H__
- #error atlconv.cpp requires atlconv.h to be included first
- #endif
-
- #ifndef _ATL_NO_CONVERSIONS
- /////////////////////////////////////////////////////////////////////////////
- // Global UNICODE<>ANSI translation helpers
- LPWSTR WINAPI AtlA2WHelper(LPWSTR lpw, LPCSTR lpa, int nChars)
- {
- _ASSERTE(lpa != NULL);
- _ASSERTE(lpw != NULL);
- // verify that no illegal character present
- // since lpw was allocated based on the size of lpa
- // don't worry about the number of chars
- lpw[0] = '\0';
- MultiByteToWideChar(CP_ACP, 0, lpa, -1, lpw, nChars);
- return lpw;
- }
-
- LPSTR WINAPI AtlW2AHelper(LPSTR lpa, LPCWSTR lpw, int nChars)
- {
- _ASSERTE(lpw != NULL);
- _ASSERTE(lpa != NULL);
- // verify that no illegal character present
- // since lpa was allocated based on the size of lpw
- // don't worry about the number of chars
- lpa[0] = '\0';
- WideCharToMultiByte(CP_ACP, 0, lpw, -1, lpa, nChars, NULL, NULL);
- return lpa;
- }
-
- #ifdef _WINGDI_
-
- // don't include this code when building DLL
- LPDEVMODEW AtlDevModeA2W(LPDEVMODEW lpDevModeW, LPDEVMODEA lpDevModeA)
- {
- if (lpDevModeA == NULL)
- return NULL;
- _ASSERTE(lpDevModeW != NULL);
- AtlA2WHelper(lpDevModeW->dmDeviceName, (LPCSTR)lpDevModeA->dmDeviceName, 32*sizeof(WCHAR));
- memcpy(&lpDevModeW->dmSpecVersion, &lpDevModeA->dmSpecVersion,
- offsetof(DEVMODEW, dmFormName) - offsetof(DEVMODEW, dmSpecVersion));
- AtlA2WHelper(lpDevModeW->dmFormName, (LPCSTR)lpDevModeA->dmFormName, 32*sizeof(WCHAR));
- memcpy(&lpDevModeW->dmLogPixels, &lpDevModeA->dmLogPixels,
- sizeof(DEVMODEW) - offsetof(DEVMODEW, dmLogPixels));
- if (lpDevModeA->dmDriverExtra != 0)
- memcpy(lpDevModeW+1, lpDevModeA+1, lpDevModeA->dmDriverExtra);
- lpDevModeW->dmSize = sizeof(DEVMODEW);
- return lpDevModeW;
- }
-
- LPTEXTMETRICW AtlTextMetricA2W(LPTEXTMETRICW lptmW, LPTEXTMETRICA lptmA)
- {
- if (lptmA == NULL)
- return NULL;
- _ASSERTE(lptmW != NULL);
- memcpy(lptmW, lptmA, sizeof(LONG) * 11);
- memcpy(&lptmW->tmItalic, &lptmA->tmItalic, sizeof(BYTE) * 5);
- MultiByteToWideChar(CP_ACP, 0, (LPCSTR)&lptmA->tmFirstChar, 1, &lptmW->tmFirstChar, 1);
- MultiByteToWideChar(CP_ACP, 0, (LPCSTR)&lptmA->tmLastChar, 1, &lptmW->tmLastChar, 1);
- MultiByteToWideChar(CP_ACP, 0, (LPCSTR)&lptmA->tmDefaultChar, 1, &lptmW->tmDefaultChar, 1);
- MultiByteToWideChar(CP_ACP, 0, (LPCSTR)&lptmA->tmBreakChar, 1, &lptmW->tmBreakChar, 1);
- return lptmW;
- }
-
- LPTEXTMETRICA AtlTextMetricW2A(LPTEXTMETRICA lptmA, LPTEXTMETRICW lptmW)
- {
- if (lptmW == NULL)
- return NULL;
- _ASSERTE(lptmA != NULL);
- memcpy(lptmA, lptmW, sizeof(LONG) * 11);
- memcpy(&lptmA->tmItalic, &lptmW->tmItalic, sizeof(BYTE) * 5);
- WideCharToMultiByte(CP_ACP, 0, &lptmW->tmFirstChar, 1, (LPSTR)&lptmA->tmFirstChar, 1, NULL, NULL);
- WideCharToMultiByte(CP_ACP, 0, &lptmW->tmLastChar, 1, (LPSTR)&lptmA->tmLastChar, 1, NULL, NULL);
- WideCharToMultiByte(CP_ACP, 0, &lptmW->tmDefaultChar, 1, (LPSTR)&lptmA->tmDefaultChar, 1, NULL, NULL);
- WideCharToMultiByte(CP_ACP, 0, &lptmW->tmBreakChar, 1, (LPSTR)&lptmA->tmBreakChar, 1, NULL, NULL);
- return lptmA;
- }
-
- LPDEVMODEA AtlDevModeW2A(LPDEVMODEA lpDevModeA, LPDEVMODEW lpDevModeW)
- {
- if (lpDevModeW == NULL)
- return NULL;
- _ASSERTE(lpDevModeA != NULL);
- AtlW2AHelper((LPSTR)lpDevModeA->dmDeviceName, lpDevModeW->dmDeviceName, 32*sizeof(char));
- memcpy(&lpDevModeA->dmSpecVersion, &lpDevModeW->dmSpecVersion,
- offsetof(DEVMODEA, dmFormName) - offsetof(DEVMODEA, dmSpecVersion));
- AtlW2AHelper((LPSTR)lpDevModeA->dmFormName, lpDevModeW->dmFormName, 32*sizeof(char));
- memcpy(&lpDevModeA->dmLogPixels, &lpDevModeW->dmLogPixels,
- sizeof(DEVMODEA) - offsetof(DEVMODEA, dmLogPixels));
- if (lpDevModeW->dmDriverExtra != 0)
- memcpy(lpDevModeA+1, lpDevModeW+1, lpDevModeW->dmDriverExtra);
- lpDevModeA->dmSize = sizeof(DEVMODEA);
- return lpDevModeA;
- }
-
- #endif //_WINGDI_
- #endif //!_ATL_NO_CONVERSIONS
-